import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Esta clase representa a un objeto que permite ver las diferentes armas 
 * con las que contara el usuario
 * 
 * @author Miguel Martinez Aguilar 
 * @version 12 de mayo del 2013
 */
public class Armeria extends ScrollActor
{
    // Declaracion de variables de instancia
    private Select_Armas selector;// es el boton selesctor de armas.
    private Lanzador lanz;// es el Lanzador.
    private boolean revez;// es un boleano que indica si Armeria se colocara en el escenario al revez.
    private int tipo;// es un numero que define el tipo de proyectil que tiene arma.
    private ImagenM arma;// es un objeto imagen que visualiza el tipo de arma elegida por el jugador.
    
    /**
     * Este es el constructor de Armeria.
     * @param lanz: el lanzador al cual se referira armeria.
     * @param revez: boleano que indica si armeria se colocara en el escenario al revez.
     * @param usado: boleano que indica si esta armaria sera usada de forma directa.
     */
    public Armeria(Lanzador lanz, boolean revez, boolean usado)
    {
        arma = new ImagenM("bala0.png");
        selector = new Select_Armas(this,usado);
        tipo = 0;
        this.lanz = lanz;
        this.revez = revez;
        if(!revez)(this.getImage()).mirrorHorizontally();
    }
    
    /**
     * Este metodo prepara los objetos que nesesita la armeria para funcionar.
     */
    public void preparar()
    {
        ScrollWorld mundo = super.getWorld();// este metodo nos permite acceder al mundo
        if(!revez)mundo.addObject(selector, this.getX() + 8, this.getY() + 17);
        else mundo.addObject(selector, this.getX() - 8, this.getY() + 17);
        mundo.addObject(arma, this.getX(), this.getY() - 5);
        selector.prepara();
    }
    
     /**
     * Este metodo envia un misil al lanzador.
     * @param esp: el espacio al que va dirigido el ataque.
     */
    public void enviaProyectil(Espacio esp)
    {
        if(esp != null){
            lanz.defineDireccion(esp);
            lanz.lanzaProyectil(tipo);
            selector.disminuir(tipo);
        }
    }
    
    /**
     * Este metodo modifica el valor de tiro del lanzador.
     * @param val: boleano que indica si se a efectuado un lanzamiento.
     */
    public void lanzamiento(boolean val)
    {
        lanz.lanzamiento(val);
    }
    
    /**
     * Este metodo modifica el valor del arma.
     * @param tipo: numero que indica el tipo de proyectil a cambiar.
     * @param img: imagen que remplazara la imagen actual del tipo de arma.
     */
    public void cambiaProyectil(int tipo, String img)
    {
        this.tipo = tipo;
        arma.setImage(img);
    }
    
    /**
     * Este metodo elige un posible proyectil para el jugador que lo solicite.
     * @param especial: boleano que indica si el tipo de arma sera especial.
     */
    public void eligeProyectil(boolean especial)
    {
        if(especial){
            //selector.autoriza(Greenfoot.getRandomNumber(3) + 1);
        }
        else selector.autoriza(0);
    }
}